package com.sophossystems.client.asmon.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

import com.sophossystems.client.asmon.dao.ClienteDao;
import com.sophossystems.client.asmon.dao.ClientePMoralesDao;
import com.sophossystems.client.asmon.dao.ClientePersonasFisicasDao;
import com.sophossystems.client.asmon.dao.DireccionDao;
import com.sophossystems.client.asmon.dao.DocumentosDao;
import com.sophossystems.client.asmon.dao.FacturaDao;
import com.sophossystems.client.asmon.dao.RecolectaDocDao;
import com.sophossystems.client.asmon.dao.RepresentanteDocDao;
import com.sophossystems.client.asmon.dao.RepresentanteLegalDao;
import com.sophossystems.client.asmon.dao.ServiciosDao;
import com.sophossystems.client.asmon.dto.ClienteDTO;
import com.sophossystems.client.asmon.dto.ClientePMoralesDTO;
import com.sophossystems.client.asmon.dto.ClientePMoralesPkDTO;
import com.sophossystems.client.asmon.dto.ClientePersonasFisicasDTO;
import com.sophossystems.client.asmon.dto.ClientePersonasFisicasPkDTO;
import com.sophossystems.client.asmon.dto.ClientePkDTO;
import com.sophossystems.client.asmon.dto.DireccionDTO;
import com.sophossystems.client.asmon.dto.DocumentosDTO;
import com.sophossystems.client.asmon.dto.DocumentosPkDTO;
import com.sophossystems.client.asmon.dto.FacturaDTO;
import com.sophossystems.client.asmon.dto.FacturaPkDTO;
import com.sophossystems.client.asmon.dto.RecolectaDocDTO;
import com.sophossystems.client.asmon.dto.RepresentanteDocDTO;
import com.sophossystems.client.asmon.dto.RepresentanteDocPkDTO;
import com.sophossystems.client.asmon.dto.RepresentanteLegalDTO;
import com.sophossystems.client.asmon.dto.RepresentanteLegalPkDTO;
import com.sophossystems.client.asmon.dto.ServiciosDTO;
import com.sophossystems.client.asmon.dto.DireccionPkDTO;
import com.sophossystems.client.asmon.dto.RecolectaDocPkDTO;
import com.sophossystems.client.asmon.dto.ServiciosPkDTO;

import com.sophossystems.client.asmon.exceptions.BusinessException;
import com.sophossystems.client.asmon.exceptions.DaoException;
import com.sophossystems.client.asmon.service.ClientService;

public class ClientServiceImpl implements ClientService {
	private DireccionDao direccionDao;
	private ClientePMoralesDao personaMoralDao;
	private ClientePersonasFisicasDao personaFisicaDao;
	private ServiciosDao serviciosDao;
	private DocumentosDao documentosDao;
	private RecolectaDocDao recoleccionDao;
	private FacturaDao facturacionDao;
	private ClienteDao clienteDao;
	private RepresentanteDocDao representanteDocDao;
	private RepresentanteLegalDao representanteLegalDao;

	private static Logger log = Logger.getLogger(ClientServiceImpl.class);

	@Override
	public ClientePersonasFisicasDTO registarPersonaFisica(
			ClientePersonasFisicasDTO persona) throws BusinessException {
		ClientePersonasFisicasDTO personaFiscaDto = null;
		ClienteDTO clienteConstructor = new ClienteDTO();

		// busca cliente por rfc para evitar duplicados
		ClienteDTO clienteRfc = new ClienteDTO();
		try {
			clienteRfc = (ClienteDTO) clienteDao.findByRfc(persona
					.getClientedto().getRfc());
		} catch (DaoException e) {
			if (e.getMessage().contains("0"))
				clienteRfc = null;
		}

		DireccionPkDTO dirId = new DireccionPkDTO();
		DireccionPkDTO idDireccionRecoleccion = new DireccionPkDTO();
		if (clienteRfc == null) {
			if (persona.getClientedto().getListaDirecciones().size() == 1
					&& persona.getClientedto().getRecoleccionDocumentos()
							.getLugarRecoleccion() == 1) {
				try {
					dirId = direccionDao.insert(persona.getClientedto()
							.getListaDirecciones().get(0));// insert direccion
					// para obtener el id de direccion.

				} catch (Exception e) {
					log.debug("error al insertar direccion causa: "
							+ e.getCause());
				}
				// settea el id de la direccion fisacal para recoleccion de
				// documentos
				persona.getClientedto().getRecoleccionDocumentos()
						.setIdDireccion(dirId.getIdDireccion());

			} else if (persona.getClientedto().getListaDirecciones().size() == 2
					&& persona.getClientedto().getRecoleccionDocumentos()
							.getLugarRecoleccion() == 3) {
				try {
					dirId = direccionDao.insert(persona.getClientedto()
							.getListaDirecciones().get(0));// insert direccion
					// para obtener el id de direccion.

				} catch (Exception e) {
					log.debug("error al insertar direccion causa: "
							+ e.getCause());
				}
			}
			try {
				idDireccionRecoleccion = direccionDao.insert(persona
						.getClientedto().getListaDirecciones().get(1));// insert
																		// direccion
				// para obtener el id de direccion.
				// settea el id de otra direccion para recoleccion de documentos
				persona.getClientedto()
						.getRecoleccionDocumentos()
						.setIdDireccion(idDireccionRecoleccion.getIdDireccion());
			} catch (Exception e) {
				log.debug("error al insertar  otra direccion causa: "
						+ e.getCause());
			}

			/*
			 * RNM Campos de tabla CLIENTES conocidos
			 */
			clienteConstructor = persona.getClientedto();
			clienteConstructor.setIdDireccion(dirId.getIdDireccion());
			clienteConstructor.setIdStatus(persona.getClientedto()
					.getIdStatus());
			clienteConstructor.setFechaCaptura(persona.getClientedto()
					.getFechaCaptura());
			clienteConstructor.setIdContadorAsig(persona.getClientedto()
					.getIdContadorAsig());
			clienteConstructor.setIdCoordinador(persona.getClientedto()
					.getIdCoordinador());
			clienteConstructor.setIdContactoVenta(persona.getClientedto()
					.getIdContactoVenta());
			clienteConstructor.setIdTipoCliente(persona.getClientedto()
					.getIdTipoCliente());
			// clienteConstructor.setIdStatus(1);
			// clienteConstructor.setFechaCaptura(new Date());
			// clienteConstructor.setIdContadorAsig(1);
			// clienteConstructor.setIdCoordinador(1);
			// clienteConstructor.setIdContactoVenta(1);
			// clienteConstructor.setIdTipoCliente(1);

			ClientePkDTO idCliente = null;
			try {
				idCliente = clienteDao.insert(clienteConstructor);
			} catch (Exception e) {
				log.debug("falla al insertar en la tabla Cliente causa: "
						+ e.getCause());
			}
			// settea idCliente para tabla de recoleccion
			persona.getClientedto().getRecoleccionDocumentos()
					.setIdCliente(idCliente.getIdCliente());
			RecolectaDocPkDTO recolecta = null;
			try {
				recolecta = recoleccionDao.insert(persona.getClientedto()
						.getRecoleccionDocumentos());
			} catch (Exception e) {
				log.debug("falla al insertar en la tabla Recoleccion causa: "
						+ e.getCause());
			}
			// Setea valor faltante en Tabla cliente --------> Actualizar al
			// final
			clienteConstructor.setIdRecolectaDoc(recolecta.getIdRecolectaDoc());

			// settea idCliente para identificacion de servicios
			persona.getClientedto().getServicios()
					.setIdCliente(idCliente.getIdCliente());
			ServiciosPkDTO pkServicios = null;
			try {
				pkServicios = serviciosDao.insert(persona.getClientedto()
						.getServicios());
			} catch (Exception e) {
				log.debug("falla al insertar en la tabla servicios causa: "
						+ e.getCause());
			}
			// settea idCliente para identificar Documentos
			persona.getClientedto().getDocumentos()
					.setIdClienteGeneral(idCliente.getIdCliente());
			DocumentosPkDTO pkDocumentos = null;
			try {
				pkDocumentos = documentosDao.insert(persona.getClientedto()
						.getDocumentos());
			} catch (Exception e) {
				log.error("falla al insertar documentos causa: " + e.getCause());
			}
			// setea idCliente para identificar Facturacion
			persona.getClientedto().getFacturacion()
					.setIdCliente(idCliente.getIdCliente());
			FacturaPkDTO pkFactura = null;
			try {
				pkFactura = facturacionDao.insert(persona.getClientedto()
						.getFacturacion());
			} catch (Exception e) {
				log.error("falla al insertar facturacion causa: "
						+ e.getCause());
			}
			persona.setIdClienteGeneral(idCliente.getIdCliente());
			ClientePersonasFisicasPkDTO pFisica = null;
			try {
				pFisica = personaFisicaDao.insert(persona);
				List<ClientePersonasFisicasDTO> lista = personaFisicaDao
						.findByPrimaryKey(pFisica.getIdCliente());
				if (lista != null) {
					if (lista.size() > 0) {
						personaFiscaDto = lista.get(0);
						System.out.println("PERSONA FISICAdto IDCLIENTE "
								+ personaFiscaDto.getIdCliente());
					} else {
						personaFiscaDto = null;
					}
				} else {
					personaFiscaDto = null;
				}
			} catch (Exception e) {
				log.error("falla en la insercion de cliente persona fisica"
						+ "causa: " + e.getCause());
			}
			// Actualiza Cliente con el idRecoleccionFaltante
			clienteConstructor.setIdCliente(idCliente.getIdCliente());
			System.out.println("idCliente Actualizar "
					+ idCliente.getIdCliente());
			try {
				clienteDao.update(persona.getClientedto());
			} catch (Exception e) {
				log.error("Falla al actualizar Cliente con idRecoleccion Faltante, causa :"
						+ e.getCause());
			}
			persona.getClientedto().setRegistrado(false);
//			settea clientedto en persona fisica para comparar los id de cliente en action
			personaFiscaDto.setClientedto(persona.getClientedto());

		} else {
						
			ClientePersonasFisicasDTO buscaDetalle = new ClientePersonasFisicasDTO();
			buscaDetalle.setClientedto(clienteRfc);
			personaFiscaDto = consultarDetallePersonaFisica(buscaDetalle);
//			personaFiscaDto.getClientedto().setRegistrado(true);
			
		}
		
		return personaFiscaDto;
	}

	@Override
	public ClientePersonasFisicasDTO consultarDetallePersonaFisica(
			ClientePersonasFisicasDTO cliente) throws BusinessException {
		
		ClienteDTO clienteRegistrado = new ClienteDTO();
		ClientePersonasFisicasDTO detalleCliente = new ClientePersonasFisicasDTO();
		List<DireccionDTO> direccionesRegistradas = new ArrayList<DireccionDTO>();
//		busca informacion general en la tabla de clientes
		try {
			clienteRegistrado = (ClienteDTO) clienteDao.findByRfc(cliente.getClientedto().getRfc());
		} catch (DaoException e) {
			if (e.getMessage().contains("0"))
				clienteRegistrado = null;
			log.debug("error al buscar informacion general de cliente ya registrado en consulta detallePersonasFisicas" +
					"casua: " + e.getCause());
		}	
		if(clienteRegistrado != null){
//			busca informacion general del cliente persona fisica
			try {
				detalleCliente = personaFisicaDao.findByIdClienteGeneral(clienteRegistrado.getIdCliente());
			} catch (Exception e) {
				log.debug("error al buscar informacion general de cliente ya registrado en altaPersonasFisicas" +
						"casua: " + e.getCause());
			}
//			busca detalle de direccion fiscal
			DireccionDTO direccionFiscal = new DireccionDTO();
			try {
				direccionFiscal = direccionDao.findByPrimaryKey(clienteRegistrado.getIdDireccion());
			} catch (Exception e) {
				log.debug("error al buscar la direccion ya registrada, causa: " + e.getCause());
			}
			direccionesRegistradas.add(direccionFiscal);
//			busca detalle de recoleccion de documentos
			RecolectaDocDTO recoleccionRegistrada = new RecolectaDocDTO();
			try {
				recoleccionRegistrada = recoleccionDao.findByPrimaryKey(clienteRegistrado.getIdRecolectaDoc());
			} catch (Exception e) {
				log.debug("falla al buscar en recoleccion de doc ya registrada causa: " + e.getCause());
			}
//			evalua y busca otra direccion de entrega de documentos
			DireccionDTO direccionRecoleccion = new DireccionDTO();
			if(recoleccionRegistrada.getLugarRecoleccion() == 3){
				try {
					direccionRecoleccion = direccionDao.findByPrimaryKey(recoleccionRegistrada.getIdDireccion());
					direccionesRegistradas.add(direccionRecoleccion);
				} catch (Exception e) {
					log.debug("Falla en busqueda de direccion de recoleccion, causa: " +e.getCause());
				}
			}
//			busca detalle de facturacion
			FacturaDTO facturacionRegistrada = new FacturaDTO();
			try {
				facturacionRegistrada = facturacionDao.findWhereIdClienteEquals(clienteRegistrado.getIdCliente()).get(0);
			} catch (Exception e) {
				log.debug("error al buscar facturación registrada, causa: " + e.getCause());
			}
//			busca documentos registrados
			DocumentosDTO documentosRegistrados = new DocumentosDTO();
			try {
				documentosRegistrados = documentosDao.findByIdClienteGeneral(clienteRegistrado.getIdCliente());
			} catch (Exception e) {
				log.debug("error al buscar documentos registrados, causa: " + e.getCause());
			}
//			busca servicios registrados
			ServiciosDTO serviciosRegistrados = new ServiciosDTO();
			try {
				serviciosRegistrados = serviciosDao.findWhereIdClienteEquals(clienteRegistrado.getIdCliente()).get(0);
			} catch (Exception e) {
				log.debug("error al buscar servicios registrados, causa: " + e.getCause());
			}
//			mapea los detalles 
			detalleCliente.setClientedto(clienteRegistrado);
			detalleCliente.getClientedto().setRegistrado(true);
			detalleCliente.getClientedto().setListaDirecciones(direccionesRegistradas);
			detalleCliente.getClientedto().setServicios(serviciosRegistrados);
			detalleCliente.getClientedto().setDocumentos(documentosRegistrados);
			detalleCliente.getClientedto().setRecoleccionDocumentos(recoleccionRegistrada);
			detalleCliente.getClientedto().setFacturacion(facturacionRegistrada);

		}else{
			detalleCliente.getClientedto().setRegistrado(false);
		}
		return detalleCliente;
	}

	@Override
	public List<ClientePersonasFisicasDTO> consultarPersonasFisicas(
			Map<String, String> lista) throws BusinessException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String modifcarPersonasFisicas(ClientePersonasFisicasDTO persona)
			throws BusinessException {
		
		ClienteDTO clienteRegistrado = new ClienteDTO();
		String status = "";
		DireccionPkDTO idNuevaDireccionRecoleccion = null;
//		busca informacion general en la tabla de clientes, si encuentra un rfc diferente actualiza al igual
//		que si conciden los ids que entra y el ya registrado, obtiene algunos id's necesarios para la actualizacion
		try {
			clienteRegistrado = (ClienteDTO) clienteDao.findByRfc(persona.getClientedto().getRfc());
		} catch (DaoException e) {
			if (e.getMessage().contains("0"))
				clienteRegistrado = null;
			log.debug("error al buscar informacion general de cliente ya registrado en consulta detallePersonasFisicas" +
					"casua: " + e.getCause());
		}	
		
//		busca detalle de recoleccion de documentos, para actualizar direcciones
		RecolectaDocDTO recoleccionRegistrada = new RecolectaDocDTO();
		try {
			recoleccionRegistrada = recoleccionDao.findByPrimaryKey(clienteRegistrado.getIdRecolectaDoc());
		} catch (Exception e) {
			log.debug("falla al buscar en recoleccion de doc ya registrada, para actualizar causa: " + e.getCause());
		}
		
		System.out.println(persona.getClientedto().getIdCliente());
		if(clienteRegistrado.getIdCliente() == persona.getClientedto().getIdCliente()){
//			actualiza la direccion fiscal
			try {
				direccionDao.update(persona.getClientedto().getListaDirecciones().get(0));
			} catch (Exception e) {
				log.error("Falla al actualizar Direccion causa: " + e.getCause());
			}
//			busca los detalles del idDireccion de RecolectaDoc en caso de que sea otra direccion de entrega de doc.
			DireccionDTO direccionEntregaRegistrada = null;
			try {
				direccionEntregaRegistrada = direccionDao.findByPrimaryKey(recoleccionRegistrada.getIdDireccion());
			} catch (Exception e) {
				 log.error("error al buscar direccion para recoleccion de doc en modifica p. fisica" +
				 		" , causa "+e.getCause());
			}
		
//			actualiza una direccion de recoleccion ya registrada
			if(persona.getClientedto().getListaDirecciones().size() == 2 && 
					persona.getClientedto().getRecoleccionDocumentos()
					.getLugarRecoleccion() == 3 && recoleccionRegistrada.getIdDireccion() == 
					direccionEntregaRegistrada.getIdDireccion() && direccionEntregaRegistrada.getIdTipoDireccion() == 2){
				try {
					direccionDao.update(persona.getClientedto().getListaDirecciones().get(1));
				} catch (Exception e) {
					log.error("Falla al actualizar Direccion de recoleccion causa: " + e.getCause());
				}
//				pasa el id de dirección a la tabla de recoleccion de documentos
				persona.getClientedto().getRecoleccionDocumentos()
				.setIdDireccion(recoleccionRegistrada.getIdDireccion());
				
//				evalua si se agrega una nueva direccion de recoleccion a un cliente ya registrado 
			}else if(persona.getClientedto().getListaDirecciones().size() == 2 && 
					persona.getClientedto().getRecoleccionDocumentos()
					.getLugarRecoleccion() == 3){
				
//				agrega la nueva dirección de recolección de documentos
				try {
					idNuevaDireccionRecoleccion = direccionDao.insert(persona.getClientedto()
							.getListaDirecciones().get(1));// insert direccion
					// para obtener el id de direccion.

				} catch (Exception e) {
					log.debug("error al insertar direccion de recoleccion, en actualizacion de cliente" +
							" personaFisica causa: "
							+ e.getCause());
				}
//				actualiza el idDireccion de la tabla Recolecta_Doc.
				persona.getClientedto().getRecoleccionDocumentos().setIdDireccion(idNuevaDireccionRecoleccion
						.getIdDireccion());
//				evalua si se ha cambiado la direccion de recoleccion por el domicilio fiscal o de asmon y borra
//				la direccion de entrega ya registrada
			}else if(persona.getClientedto().getListaDirecciones().size() == 1 && (persona.getClientedto()
					.getRecoleccionDocumentos().getLugarRecoleccion() == 1 || persona.getClientedto()
					.getRecoleccionDocumentos().getLugarRecoleccion() == 2) && 
					recoleccionRegistrada.getIdDireccion() != clienteRegistrado.getIdDireccion()){
				try {
					DireccionPkDTO idBorrarDireccion = new DireccionPkDTO();
					idBorrarDireccion.setIdDireccion(recoleccionRegistrada.getIdDireccion());
					direccionDao.delete(idBorrarDireccion);
				} catch (Exception e) {
					 log.error("error al eliminar direccion de recoleccion en modifica persona fisica. " +
					 		"causa: " + e.getCause());
				}
				persona.getClientedto().getRecoleccionDocumentos().setIdDireccion(clienteRegistrado.getIdDireccion());
			}else{
				persona.getClientedto().getRecoleccionDocumentos().setIdDireccion(clienteRegistrado.getIdDireccion());
			}
//			actualiza la tabla de Cliente
			try {
				persona.getClientedto().setIdDireccion(clienteRegistrado.getIdDireccion());
				persona.getClientedto().setIdRecolectaDoc(clienteRegistrado.getIdRecolectaDoc());
				clienteDao.update(persona.getClientedto());
			} catch (Exception e) {
				log.error("Falla al actualizar cliente causa: " + e.getCause());
			}
//			actualiza tabla de servicios
			try {
				persona.getClientedto().getServicios().setIdCliente(clienteRegistrado.getIdCliente());
				serviciosDao.update(persona.getClientedto().getServicios());
			} catch (Exception e) {
				log.error("Falla al actualizar servicios causa: " + e.getCause());
			}
//			actualiza tabla de documentos
			try {
				persona.getClientedto().getDocumentos().setIdClienteGeneral(clienteRegistrado.getIdCliente());
				documentosDao.update(persona.getClientedto().getDocumentos());
			} catch (Exception e) {
				log.error("Falla al actualizar documentos causa: " + e.getCause());
			}
//			actualiza tabla de recoleccion de documentos
			try {
				persona.getClientedto().getRecoleccionDocumentos().setIdCliente(clienteRegistrado.getIdCliente());
				recoleccionDao.update(persona.getClientedto()
						.getRecoleccionDocumentos());
			} catch (Exception e) {
				log.error("Falla al recolectaDocumentos servicios causa: "
						+ e.getCause());
			}
//			actualiza tabla de facturacion
			try {
				System.out.println(clienteRegistrado.getIdCliente());
				System.out.println(persona.getClientedto().getFacturacion().getIdCliente());
//				persona.getClientedto().getFacturacion().setIdCliente(clienteRegistrado.getIdCliente());
				System.out.println(persona.getClientedto().getFacturacion().getIdCliente());
				facturacionDao.update(persona.getClientedto().getFacturacion());
			} catch (Exception e) {
				log.error("Falla al actualizar facturacion causa: " + e.getCause());
			}
//			actualiza tabla de clientes personas fisicas.
			try {
				personaFisicaDao.update(persona);
			} catch (Exception e) {
				log.error("Falla al actualizar servicios causa: " + e.getCause());
			}
			status = "updated";
		}else{
			status = "error";
		}
		
		return status;
	}

	@Override
	public String borrarPersonaFisica(ClientePersonasFisicasDTO persona)
			throws BusinessException {
		String resultado = "borrado";
		ClientePersonasFisicasDTO detalleCliente = consultarDetallePersonaFisica(persona);
		ClientePkDTO pkCliente = new ClientePkDTO();
		ClientePersonasFisicasPkDTO pkPersonaFisica = new ClientePersonasFisicasPkDTO();
		DireccionPkDTO  pkDireccionFiscal = new DireccionPkDTO();
		DireccionPkDTO  pkDireccionRecoleccion = new DireccionPkDTO();
		ServiciosPkDTO pkServicios =  new ServiciosPkDTO();
		DocumentosPkDTO pkDocumentos = new DocumentosPkDTO();
		RecolectaDocPkDTO pkRecoleccion = new RecolectaDocPkDTO();
		FacturaPkDTO pkFacturacion =  new FacturaPkDTO();
		
		pkCliente.setIdCliente(detalleCliente.getClientedto().getIdCliente());
		pkPersonaFisica.setIdCliente(detalleCliente.getIdCliente());
		pkDireccionFiscal.setIdDireccion(detalleCliente.getClientedto().getIdDireccion());
		if(detalleCliente.getClientedto().getRecoleccionDocumentos().getLugarRecoleccion() == 3){
			pkDireccionRecoleccion.setIdDireccion(detalleCliente.getClientedto().getRecoleccionDocumentos().getIdDireccion());
		}
		pkServicios.setIdServicos(detalleCliente.getClientedto().getServicios().getIdServicos());
		pkDocumentos.setIdCliente(detalleCliente.getClientedto().getDocumentos().getIdCliente());
		pkRecoleccion.setIdRecolectaDoc(detalleCliente.getClientedto().getIdRecolectaDoc());
		pkFacturacion.setNumero(detalleCliente.getClientedto().getFacturacion().getNumero());
		
//		elimina registro de tabla facturacion
		try {
			facturacionDao.delete(pkFacturacion);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro den tabla facturacion, causa: " + e.getCause());
		}
//		elimina registro tabla recoleccion de documentos
		try {
			recoleccionDao.delete(pkRecoleccion);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro den tabla recoleccion de documentos, causa: " + e.getCause());
		}
//		elimina registro de la tabla documentos
		try {
			documentosDao.delete(pkDocumentos);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro den tabla documentos, causa: " + e.getCause());
		}
//		elimima registos en la tabla servicios
		try {
			serviciosDao.delete(pkServicios);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro den tabla servicios, causa: " + e.getCause());
		}
//		elimina registro de personaFisca en tabla clientes_personas_fisicas
		try {
			personaFisicaDao.delete(pkPersonaFisica);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro den tabla clientes personas fisicas, causa: " + e.getCause());
		}
//		elimina informacion de la tabla cliente
		try {
			clienteDao.delete(pkCliente);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro den tabla clientes, causa: " + e.getCause());
		}
//		elimina direccion fiscal
		try {
			direccionDao.delete(pkDireccionFiscal);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro direccion, causa: " + e.getCause());
		}
		if(detalleCliente.getClientedto().getRecoleccionDocumentos().getLugarRecoleccion() == 3){
			try {
				direccionDao.delete(pkDireccionRecoleccion);
			} catch (Exception e) {
				resultado = "error";
				log.error("error al eliminar registro direccion de recoleccion, causa: " + e.getCause());
			}
		}
				
		return resultado;
	}

	@Override
	public ClientePMoralesDTO registarPersonaMoral(ClientePMoralesDTO persona)
			throws BusinessException {
		ClientePMoralesDTO personaMoralDto = null;
		ClienteDTO clienteConstructor = new ClienteDTO();

		// busca cliente por rfc para evitar duplicados
		ClienteDTO clienteRfc = null;
		try {
			clienteRfc = (ClienteDTO) clienteDao.findByRfc(persona.getCliente()
					.getRfc());
		} catch (DaoException e) {
			if (e.getMessage().contains("0"))
				clienteRfc = null;
		}

		DireccionPkDTO dirId = new DireccionPkDTO();
		DireccionPkDTO idDireccionRecoleccion = new DireccionPkDTO();
		DireccionPkDTO idDireccionRepresentante = new DireccionPkDTO();
		if (clienteRfc == null) {
			if (persona.getCliente().getListaDirecciones().size() == 1 &&
					((persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 1 ||
					persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 2)) &&
					persona.getCliente().getListaDirecciones().get(0).getIdTipoDireccion() == 1) {
				try {
					dirId = direccionDao.insert(persona.getCliente()
							.getListaDirecciones().get(0));// insert direccion
					// para obtener el id de direccion.
				} catch (Exception e) {
					log.debug("error al insertar direccion causa: "
							+ e.getCause());
				}
				// setea el idDireccion para la tabla cliente
				persona.getCliente().setIdDireccion(dirId.getIdDireccion());
				// settea el id de la direccion fisacal para recoleccion de
				// documentos
				persona.getCliente().getRecoleccionDocumentos()
						.setIdDireccion(dirId.getIdDireccion());
			} else if (persona.getCliente().getListaDirecciones().size() == 2
					&& persona.getCliente().getRecoleccionDocumentos()
							.getLugarRecoleccion() == 3
					&& persona.getCliente().getListaDirecciones().get(0)
							.getIdTipoDireccion() == 1
					&& persona.getCliente().getListaDirecciones().get(1)
							.getIdTipoDireccion() == 2) {
				try {
					dirId = direccionDao.insert(persona.getCliente()
							.getListaDirecciones().get(0));// insert direccion
					// para obtener el id de direccion.
				} catch (Exception e) {
					log.debug("error al insertar direccion causa: "
							+ e.getCause());
				}
				// setea el idDireccion para la tabla cliente
				persona.getCliente().setIdDireccion(dirId.getIdDireccion());
				try {
					idDireccionRecoleccion = direccionDao.insert(persona
							.getCliente().getListaDirecciones().get(1));// insert
																		// direccion
					// para obtener el id de direccion de recoleccion de
					// documentos
				} catch (Exception e) {
					log.debug("error al insertar direccion de entrega de documentos causa: "
							+ e.getCause());
				}
				// settea el id de otra direccion para recoleccion de documentos
				persona.getCliente()
						.getRecoleccionDocumentos()
						.setIdDireccion(idDireccionRecoleccion.getIdDireccion());
			} else if (persona.getCliente().getListaDirecciones().size() == 2
					&& (persona.getCliente().getRecoleccionDocumentos()
							.getLugarRecoleccion() == 1 || persona.getCliente()
							.getRecoleccionDocumentos().getLugarRecoleccion() == 2)
					&& persona.getCliente().getListaDirecciones().get(0)
							.getIdTipoDireccion() == 1
					&& persona.getCliente().getListaDirecciones().get(1)
							.getIdTipoDireccion() == 3) {
				try {
					dirId = direccionDao.insert(persona.getCliente()
							.getListaDirecciones().get(0));// insert direccion
					// para obtener el id de direccion.
				} catch (Exception e) {
					log.debug("error al insertar direccion causa: "
							+ e.getCause());
				}
				// setea el idDireccion para la tabla cliente
				persona.getCliente().setIdDireccion(dirId.getIdDireccion());
				try {
					idDireccionRepresentante = direccionDao.insert(persona
							.getCliente().getListaDirecciones().get(1));// insert
																		// direccion
					// para obtener el id de direccion del representante legal
				} catch (Exception e) {
					log.debug("error al insertar direccion de representante causa: "
							+ e.getCause());
				}
				// settea la direccion del representante legal
				persona.getCliente()
						.getRepresentanteLegal()
						.setIdDireccion(
								idDireccionRepresentante.getIdDireccion());
			}else if(persona.getCliente().getListaDirecciones().size() == 3 &&
					persona.getCliente().getListaDirecciones().get(0).getIdTipoDireccion() == 1 &&
					persona.getCliente().getListaDirecciones().get(1).getIdTipoDireccion() == 2 &&
					persona.getCliente().getListaDirecciones().get(2).getIdTipoDireccion() == 3){
				try {
					dirId = direccionDao.insert(persona.getCliente()
							.getListaDirecciones().get(0));// insert direccion
					// para obtener el id de direccion.
				} catch (Exception e) {
					log.debug("error al insertar direccion causa: "
							+ e.getCause());
				}
				// setea el idDireccion para la tabla cliente
				persona.getCliente().setIdDireccion(dirId.getIdDireccion());
				try {
					idDireccionRecoleccion = direccionDao.insert(persona
							.getCliente().getListaDirecciones().get(1));// insert
																		// direccion
					// para obtener el id de direccion de recoleccion de
					// documentos
				} catch (Exception e) {
					log.debug("error al insertar direccion de entrega de documentos causa: "
							+ e.getCause());
				}
				// settea el id de otra direccion para recoleccion de documentos
				persona.getCliente()
						.getRecoleccionDocumentos()
						.setIdDireccion(idDireccionRecoleccion.getIdDireccion());
				try {
					idDireccionRepresentante = direccionDao.insert(persona
							.getCliente().getListaDirecciones().get(2));// insert
																		// direccion
					// para obtener el id de direccion del representante legal
				} catch (Exception e) {
					log.debug("error al insertar direccion de representante causa: "
							+ e.getCause());
				}
				// settea la direccion del representante legal
				persona.getCliente()
						.getRepresentanteLegal()
						.setIdDireccion(
								idDireccionRepresentante.getIdDireccion());
			}
			/*
			 * RNM
			 * Campos de tabla CLIENTES conocidos
			 */
			clienteConstructor = persona.getCliente();
						clienteConstructor.setIdTipoCliente(persona.getCliente().getIdTipoCliente());
			clienteConstructor.setIdStatus(persona.getCliente().getIdStatus());
			clienteConstructor.setFechaCaptura(persona.getCliente().getFechaCaptura());
			clienteConstructor.setIdContadorAsig(persona.getCliente().getIdContadorAsig());
			clienteConstructor.setIdCoordinador(persona.getCliente().getIdCoordinador());
			clienteConstructor.setIdContactoVenta(persona.getCliente().getIdContactoVenta());
			
			ClientePkDTO idCliente = null;
			try {
				idCliente = clienteDao.insert(clienteConstructor);
			} catch (Exception e) {
				log.debug("error al insertar en tabla cliente causa: "
						+ e.getCause());
			}
//			settea el idCliente en la tabla recoleccion de documentos
			persona.getCliente().getRecoleccionDocumentos().setIdCliente(idCliente.getIdCliente());
			RecolectaDocPkDTO recolecta = null;
			try {
				recolecta = recoleccionDao.insert(persona
						.getCliente().getRecoleccionDocumentos());
			} catch (Exception e) {
				log.debug("error al insertar en tabla recoleccionDoc causa: "
						+ e.getCause());
			}
			//Setea valor faltante en Tabla cliente --------> Actualizar al final
			clienteConstructor.setIdRecolectaDoc(recolecta.getIdRecolectaDoc());
			//settea idCliente para identificacion de servicios
			persona.getCliente().getServicios().setIdCliente(idCliente.getIdCliente());
			ServiciosPkDTO pkServicios = null;
			try {
				pkServicios = serviciosDao.insert(persona.
						getCliente().getServicios());
			} catch (Exception e) {
				log.debug("error al insertar en tabla servicios causa: "
						+ e.getCause());
			}
			//settea idCliente para identificar Documentos
			persona.getCliente().getDocumentos().setIdClienteGeneral(idCliente.getIdCliente());
			DocumentosPkDTO pkDocumentos = null;
			try {
				pkDocumentos = documentosDao.insert(persona.getCliente().
						getDocumentos());
			} catch (Exception e) {
				log.debug("error al insertar en tabla Documentos causa: "+ e.getCause());
			}
			//evalua si en documentos se entrega identificacion del representante legal
			if(persona.getCliente().getDocumentos().getIdentRepLegal() == 1){
				//setea idCliente en RepresentanteDoc
				persona.getCliente().getRepresentanteDoc().setIdCliente(idCliente.getIdCliente());
				RepresentanteDocPkDTO pkRepresentanteDoc = null;
				try {
					pkRepresentanteDoc = representanteDocDao.insert(persona.getCliente().getRepresentanteDoc());
				} catch (Exception e) {
					log.debug("error al insertar en tabla RepresentanteDoc causa: "+ e.getCause());
				}
				//setea idCliente en RepresentanteLegal
				persona.getCliente().getRepresentanteLegal().setIdCliente(idCliente
						.getIdCliente());
				RepresentanteLegalPkDTO pkRepresentante = null;
				try {
					pkRepresentante = representanteLegalDao.insert(persona
							.getCliente().getRepresentanteLegal());
				} catch (Exception e) {
					log.debug("error al insertar en tabla RepresentanteDoc causa: "+ e.getCause());
				}
			}
//			setea idCliente para identificar Facturacion
			persona.getCliente().getFacturacion().setIdCliente(idCliente.getIdCliente());
			FacturaPkDTO pkFactura = null;
			try {
				pkFactura = facturacionDao.insert(persona.getCliente().getFacturacion());
			} catch (Exception e) {
				log.debug("error al insertar en tabla facturacion causa: "+ e.getCause());
			}
			//settea idCliente en la tabla CluentePMoral
			persona.setIdClienteGeneral(idCliente.getIdCliente());
			ClientePMoralesPkDTO pMoral = null;
			try {
				pMoral = personaMoralDao.insert(persona);
				ClientePMoralesDTO lista = personaMoralDao.findByPrimaryKey(pMoral
						.getIdCliente());
				if (lista != null) {

					personaMoralDto = lista;

				} else {
					personaMoralDto = null;
				}
			} catch (Exception e) {
				log.debug("error al insertar en tabla clientePmoral causa: "+ e.getCause());
			}
			//Actualiza Cliente con el idRecoleccionFaltante
			clienteConstructor.setIdCliente(idCliente.getIdCliente());
			try {
				clienteDao.update(clienteConstructor);
			} catch (Exception e) {
				log.error("Falla al actualizar Cliente con idRecoleccion Faltante, causa :" 
						+ e.getCause());
			}
//			settea clientedto en persona fisica para comparar los id de cliente en action
			persona.getCliente().setRegistrado(false);
			personaMoralDto.setCliente(persona.getCliente());
		}else{
			
			ClientePMoralesDTO buscaDetalle = new ClientePMoralesDTO();
			buscaDetalle.setCliente(clienteRfc);
			personaMoralDto = consultarDetallePersonaMoral(buscaDetalle);
//			personaMoralDto.getCliente().setRegistrado(true);
		
		}
		
		return personaMoralDto;
	}

	@Override
	public ClientePMoralesDTO consultarDetallePersonaMoral(
			ClientePMoralesDTO cliente) throws BusinessException {
		
		ClienteDTO clienteRegistrado = new ClienteDTO();
		ClientePMoralesDTO detalleCliente = new ClientePMoralesDTO();
		List<DireccionDTO> direccionesRegistradas = new ArrayList<DireccionDTO>();
		
//		busca informacion general en la tabla de clientes
		try {
			clienteRegistrado = (ClienteDTO) clienteDao.findByRfc(cliente.getCliente().getRfc());
		} catch (DaoException e) {
			if (e.getMessage().contains("0"))
				clienteRegistrado = null;
			log.debug("error al buscar informacion general de cliente ya registrado en consulta detallePersonasFisicas" +
					"casua: " + e.getCause());
		}	
		
		if(clienteRegistrado != null){
//			busca informacion general del cliente persona moral
			try {
				detalleCliente = personaMoralDao.findByIdClienteGeneral(clienteRegistrado.getIdCliente());
			} catch (Exception e) {
				log.error("error al buscar personaMoral, causa :" 
						+ e.getCause());
			}
			
//			busca direccion fiscal del cliente moral
			DireccionDTO direccionFiscalPMoral = new DireccionDTO();
			DireccionDTO direccionRecoeccionPMoral = new DireccionDTO();
			DireccionDTO direccionRepresentante = new DireccionDTO();
			try {
				direccionFiscalPMoral = direccionDao.findByPrimaryKey(clienteRegistrado.getIdDireccion());
			} catch (Exception e) {
				log.error("error al buscar direccion fiscal cliente moral, causa :" 
						+ e.getCause());
			}
			
//			busca servicios del cliente moral
			ServiciosDTO serviciosPMoral = new ServiciosDTO();
			try {
				serviciosPMoral = serviciosDao.findWhereIdClienteEquals(clienteRegistrado.getIdCliente()).get(0);
			} catch (Exception e) {
				log.error("error al buscar servicios cliente moral, causa :" 
						+ e.getCause());
			}
			
//			busca documentos cliente persona moral
			DocumentosDTO documentosPMoral = new DocumentosDTO();
			try {
				documentosPMoral = documentosDao.findByIdClienteGeneral(clienteRegistrado.getIdCliente());
			} catch (Exception e) {
				log.error("error al buscar documentos cliente moral, causa :" 
						+ e.getCause());
			}
			
//			busca recoleccion de documentos cliente moral
			RecolectaDocDTO recoleccionPMoral = new RecolectaDocDTO();
			try {
				recoleccionPMoral = recoleccionDao.findWhereIdClienteEquals(clienteRegistrado.getIdCliente()).get(0);
			} catch (Exception e) {
				log.error("error al buscar recoleccion cliente moral, causa :" 
						+ e.getCause());
			}
			
//			busca facturacion de cliente moral
			FacturaDTO facturaPMoral = new FacturaDTO();
			try {
				facturaPMoral = facturacionDao.findWhereIdClienteEquals(clienteRegistrado.getIdCliente()).get(0);
			} catch (Exception e) {
				log.error("error al buscar facturacion cliente moral, causa :" 
						+ e.getCause());
			}
			
//			evalua y busca dieccion de recoleccion de documentos cliente moral
			if(recoleccionPMoral.getLugarRecoleccion() == 3){
				try {
					direccionRecoeccionPMoral = direccionDao.findByPrimaryKey(recoleccionPMoral.getIdDireccion());
				} catch (Exception e) {
					log.error("error al buscar direccion recoleccion cliente moral, causa :" 
							+ e.getCause());
				}
			}
			
//			evalua y busca datos de representante legal cliente moral
			RepresentanteDocDTO documentosRepresentante = new RepresentanteDocDTO();
			RepresentanteLegalDTO representanteLegal = new RepresentanteLegalDTO();
			if(documentosPMoral.getIdentRepLegal() == 1){
				try {
					documentosRepresentante = representanteDocDao.
							findWhereIdClienteEquals(clienteRegistrado.getIdCliente()).get(0);
				} catch (Exception e) {
					log.error("error al buscar documentos representante legal, causa :" 
							+ e.getCause());
				}
				try {
					representanteLegal = representanteLegalDao
							.findWhereIdClienteEquals(clienteRegistrado.getIdCliente()).get(0);
				} catch (Exception e) {
					log.error("error al buscar representante legal, causa :" 
							+ e.getCause());
				}
				try {
					direccionRepresentante = direccionDao.findByPrimaryKey(representanteLegal.getIdDireccion());
				} catch (Exception e) {
					log.error("error al buscar direccion representante legal, causa :" 
							+ e.getCause());
				}
				
			}
//			mapea direcciones encontradas
			direccionesRegistradas.add(direccionFiscalPMoral);
			direccionesRegistradas.add(direccionRecoeccionPMoral);
			direccionesRegistradas.add(direccionRepresentante);
//			mapea detalle de cliente
			detalleCliente.setCliente(clienteRegistrado);
			detalleCliente.getCliente().setRegistrado(true);
			detalleCliente.getCliente().setListaDirecciones(direccionesRegistradas);
			detalleCliente.getCliente().setServicios(serviciosPMoral);
			detalleCliente.getCliente().setDocumentos(documentosPMoral);
			detalleCliente.getCliente().setRecoleccionDocumentos(recoleccionPMoral);
			detalleCliente.getCliente().setFacturacion(facturaPMoral);
			detalleCliente.getCliente().setRepresentanteDoc(documentosRepresentante);
			detalleCliente.getCliente().setRepresentanteLegal(representanteLegal);

		}else{
			detalleCliente.getCliente().setRegistrado(false);
		}
		return detalleCliente;
	}

	@Override
	public List<ClientePMoralesDTO> consultarPersonasMoral(
			Map<String, String> lista) throws BusinessException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String modifcarPersonasMorales(ClientePMoralesDTO persona)
			throws BusinessException {
		ClienteDTO clienteRegistrado = new ClienteDTO();
		String status = "";
		
//		busca informacion general en la tabla de clientes, si encuentra un rfc diferente actualiza al igual
//		que si conciden los ids que entra y el ya registrado, obtiene algunos id's necesarios para la actualizacion
		try {
			clienteRegistrado = (ClienteDTO) clienteDao.findByRfc(persona.getCliente().getRfc());
		} catch (DaoException e) {
			if (e.getMessage().contains("0"))
				clienteRegistrado = null;
			log.debug("error al buscar informacion general de cliente ya registrado en consulta detallePersonasFisicas" +
					"casua: " + e.getCause());
		}
//		setea el idDireccion del Cliente en Recoleccion de documentos en caso de que no se haga algun cambio
//		persona.getCliente().getRecoleccionDocumentos().setIdCliente(clienteRegistrado.getIdCliente());
//		busca detalle de recoleccion de documentos, para actualizar direcciones
		RecolectaDocDTO recoleccionRegistrada = new RecolectaDocDTO();
		try {
			recoleccionRegistrada = recoleccionDao.findByPrimaryKey(clienteRegistrado.getIdRecolectaDoc());
		} catch (Exception e) {
			log.debug("falla al buscar en recoleccion de doc ya registrada, para actualizar causa: " + e.getCause());
		}
//		busca detalles de documentos de persona moral, para evalar informacion sobre representante legal
		DocumentosDTO documentosPersonaMoral = null;
		try {
			documentosPersonaMoral = documentosDao.findByIdClienteGeneral(clienteRegistrado.getIdCliente());
		} catch (Exception e) {
			log.debug("falla al buscar documentos de persona moral para evaluar i" +
					"nformacion de representante, causa: " + e.getCause());
		}
//		busca detalles representante legal
		RepresentanteLegalDTO detalleRepresentante = null;
		try {
			detalleRepresentante = representanteLegalDao.
					findWhereIdClienteEquals(clienteRegistrado.getIdCliente()).get(0);
		} catch (Exception e) {
			log.debug("falla al buscar representante legal, causa:  " + e.getCause());
		}
//		busca detalles de documentos de representante legal
		RepresentanteDocDTO documentosRepresentante = null;
		try {
			documentosRepresentante = representanteDocDao.findWhereIdClienteEquals(clienteRegistrado
					.getIdCliente()).get(0);
		} catch (Exception e) {
			log.debug("falla al buscar documentos del representante, causa:  " + e.getCause());
		}
		
		if(clienteRegistrado.getIdCliente() == persona.getCliente().getIdCliente()){
			
//			actualiza la tabla de Cliente
			try {
				persona.getCliente().setIdDireccion(clienteRegistrado.getIdDireccion());
				persona.getCliente().setIdRecolectaDoc(clienteRegistrado.getIdRecolectaDoc());
				clienteDao.update(persona.getCliente());
			} catch (Exception e) {
				log.error("Falla al actualizar cliente causa: " + e.getCause());
			}
			
//			actualiza la direccion fiscal
			try {
				direccionDao.update(persona.getCliente().getListaDirecciones().get(0));
			} catch (Exception e) {
				log.error("Falla al actualizar Direccion causa: " + e.getCause());
			}
//			actualiza tabla de facturacion
			try {
				persona.getCliente().getFacturacion().setIdCliente(clienteRegistrado.getIdCliente());
				facturacionDao.update(persona.getCliente().getFacturacion());
			} catch (Exception e) {
				log.error("Falla al actualizar facturacion causa: " + e.getCause());
			}
//			actualiza tabla de clientes personas morales
			try {
				persona.setIdClienteGeneral(clienteRegistrado.getIdCliente());
				personaMoralDao.update(persona);
			} catch (Exception e) {
				log.error("Falla al actualizar Persona Moral causa: "
						+ e.getCause());
			}
//			actualiza tabla de servicios
			try {
				persona.getCliente().getServicios().setIdCliente(clienteRegistrado.getIdCliente());
				serviciosDao.update(persona.getCliente().getServicios());
			} catch (Exception e) {
				log.error("Falla al actualizar servicios causa: " + e.getCause());
			}
//			actualiza tabla de documentos
			try {
				persona.getCliente().getDocumentos().setIdClienteGeneral(clienteRegistrado.getIdCliente());
				documentosDao.update(persona.getCliente().getDocumentos());
			} catch (Exception e) {
				log.error("Falla al actualizar documentos causa: " + e.getCause());
			}
			
//			evalua si se agrega informacion del representante legal
			if(documentosPersonaMoral.getIdentRepLegal() == 0 &&
					persona.getCliente().getDocumentos().getIdentRepLegal() == 1){

//				inserta detalles de documentacion del representante
				RepresentanteDocPkDTO documentosRL = null;
				try {
					persona.getCliente().getRepresentanteDoc().setIdCliente(clienteRegistrado.getIdCliente());
					documentosRL = representanteDocDao.insert(persona.getCliente().getRepresentanteDoc());
				} catch (Exception e) {
					log.error("Falla al insertar documentos del representante en modifica persona moral" +
							" causa: " + e.getCause());				
				}
//				evalua el numero de direcciones que llegan para insertar la direccion del representante
				DireccionPkDTO idDireccionRL = null;
				if(persona.getCliente().getListaDirecciones().size() == 2 && persona.getCliente().
						getListaDirecciones().get(1).getIdTipoDireccion() == 3 ){
					
					try {
						idDireccionRL = direccionDao.insert(persona.getCliente()
								.getListaDirecciones().get(1));
					} catch (Exception e) {
						log.error("error al dar de alta direccion de representante legal " +
						 		" , causa "+e.getCause());
					}
//					inserta el idDireccion en la informacion del representante
					persona.getCliente().getRepresentanteLegal().setIdDireccion(idDireccionRL.getIdDireccion());
//					evalua si hay una direccion de recoleccion ya registrada, si el cliente la elimina, se borra de 
//					la base
					if((persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 1 || 
							persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 2) && 
							recoleccionRegistrada.getIdDireccion() != clienteRegistrado.getIdDireccion()){
						try {
							DireccionPkDTO idBorrarDireccion = new DireccionPkDTO();
							idBorrarDireccion.setIdDireccion(recoleccionRegistrada.getIdDireccion());
							direccionDao.delete(idBorrarDireccion);
							persona.getCliente().getRecoleccionDocumentos().setIdDireccion(clienteRegistrado.getIdDireccion());
						} catch (Exception e) {
							 log.error("error al eliminar direccion de recoleccion en modifica persona fisica. " +
							 		"causa: " + e.getCause());
						}
					}else{
						persona.getCliente().getRecoleccionDocumentos().setIdDireccion(clienteRegistrado.getIdDireccion());
					}
					
//					inserta la informacion del representante legal
					try {
						representanteLegalDao.insert(persona.getCliente().getRepresentanteLegal());
					} catch (Exception e) {
						log.error("falla al insertar informacion del representante legal en modificas persona moral causa:" +
					e.getCause());
					}
					
//					actualiza tabla de recoleccion de documentos
					try {
						persona.getCliente().getRecoleccionDocumentos().setIdCliente(clienteRegistrado.getIdCliente());
						recoleccionDao.update(persona.getCliente()
								.getRecoleccionDocumentos());
					} catch (Exception e) {
						log.error("Falla al recolectaDocumentos servicios causa: "
								+ e.getCause());
					}
					
//					evalua numero de direcciones para dar de alta direccion del representante o actualizar direcciones
//					de recoleccion de documentos o represenante legal
				}else if(persona.getCliente().getListaDirecciones().size() == 3 && persona.getCliente().
						getListaDirecciones().get(2).getIdTipoDireccion() == 3){
					
					try {
						idDireccionRL = direccionDao.insert(persona.getCliente()
								.getListaDirecciones().get(2));
					} catch (Exception e) {
						log.error("error al dar de alta direccion de representante legal " +
						 		" , causa "+e.getCause());
					}
//					inserta el idDireccion en la informacion del representante
					persona.getCliente().getRepresentanteLegal().setIdDireccion(idDireccionRL.getIdDireccion());	
					
					
//					evalua numero de direcciones para recoleccion de documentos para dar de alta o actualizar
//					direccion de recoleccion
					DireccionPkDTO idNuevaDireccionRecoleccion = null;
					if(persona.getCliente().getListaDirecciones().get(1).getIdTipoDireccion() == 2 && 
							persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 3 && 
							recoleccionRegistrada.getIdDireccion() == clienteRegistrado.getIdDireccion()){
//						inserta nueva direccion de recoleccion de documentos
						try {
							idNuevaDireccionRecoleccion = direccionDao.insert(persona.getCliente()
									.getListaDirecciones().get(1));// insert direccion
							// para obtener el id de direccion.
						} catch (Exception e) {
							log.debug("error al insertar direccion de recoleccion, en actualizacion de cliente" +
									" personaMoral causa: "
									+ e.getCause());
						}
						persona.getCliente().getRecoleccionDocumentos().setIdDireccion(idNuevaDireccionRecoleccion.
								getIdDireccion());
//						evalua si ya se tiene una direccion de recoleccion ya registrada para actualizar
					}else if(recoleccionRegistrada.getIdDireccion() != clienteRegistrado.getIdDireccion() && 
							persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 3){
//						actualiza direccion de recoleccion ya registrada
						try {
							persona.getCliente().getListaDirecciones().get(1).setIdDireccion(recoleccionRegistrada
									.getIdDireccion());
							direccionDao.update(persona.getCliente().getListaDirecciones().get(1));
							persona.getCliente().getRecoleccionDocumentos().setIdDireccion(recoleccionRegistrada
									.getIdDireccion());
						} catch (Exception e) {
							log.error("Falla al actualizar Direccion de recoleccion causa: " + e.getCause());
						}					
				}
//				inserta informacion del representante legal
				RepresentanteLegalPkDTO idRepresentante = null;
				try {
					persona.getCliente().getRepresentanteLegal().setIdCliente(clienteRegistrado.getIdCliente());
					idRepresentante = representanteLegalDao.insert(persona.getCliente().getRepresentanteLegal());
				} catch (Exception e) {
					log.error("Falla al insertar informacion del representante en modifica persona moral" +
							" causa: " + e.getCause());
				}			
				
//				actualiza tabla de recoleccion de documentos
				try {
					persona.getCliente().getRecoleccionDocumentos().setIdCliente(clienteRegistrado.getIdCliente());
					recoleccionDao.update(persona.getCliente()
							.getRecoleccionDocumentos());
				} catch (Exception e) {
					log.error("Falla al recolectaDocumentos servicios causa: "
							+ e.getCause());
				}
			}
//				evalua si ya se tiene informacion del representante, solo para actualizar
			}else if(documentosPersonaMoral.getIdentRepLegal() == 1 &&
					persona.getCliente().getDocumentos().getIdentRepLegal() == 1){
				
//				se evalua el numero de direcciones para actualizar la correspondiente al representante legal
				if(persona.getCliente().getListaDirecciones().size() == 2 && persona.getCliente().
						getListaDirecciones().get(1).getIdTipoDireccion() == 3){
										
//					actualiza la direccion del representante
					try {
						persona.getCliente().getListaDirecciones().get(1).setIdDireccion(detalleRepresentante
								.getIdDireccion());
						direccionDao.update(persona.getCliente().getListaDirecciones().get(1));
					} catch (Exception e) {
						log.error("Falla al actualizar direccion representante causa: " + e.getCause());
					}
//					evalua si se borra la direccion de entrega en la edicion del cliente
					if((persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 1 || 
							persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 2) && 
							recoleccionRegistrada.getLugarRecoleccion() == 3){
						try {
							DireccionPkDTO idBorrarDireccion = new DireccionPkDTO();
							idBorrarDireccion.setIdDireccion(recoleccionRegistrada.getIdDireccion());
							direccionDao.delete(idBorrarDireccion);
						} catch (Exception e) {
							log.error("error al eliminar direccion de recoleccion en modifica persona fisica. " +
							 		"causa: " + e.getCause());
						}
						persona.getCliente().getRecoleccionDocumentos().setIdDireccion(clienteRegistrado.getIdDireccion());
					}
				}else if(persona.getCliente().getListaDirecciones().size() == 3 && persona.getCliente().
						getListaDirecciones().get(2).getIdTipoDireccion() == 3){
//					actualiza la direccion del representante
					try {
						persona.getCliente().getListaDirecciones().get(2).setIdDireccion(detalleRepresentante
								.getIdDireccion());
						direccionDao.update(persona.getCliente().getListaDirecciones().get(2));
					} catch (Exception e) {
						log.error("Falla al actualizar direccion representante causa: " + e.getCause());
					}
					
//					evalua numero de direcciones para recoleccion de documentos para dar de alta o actualizar
//					direccion de recoleccion
					DireccionPkDTO idNuevaDireccionRecoleccion = null;
					if(persona.getCliente().getListaDirecciones().get(1).getIdTipoDireccion() == 2 && 
							persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 3 && 
							recoleccionRegistrada.getIdDireccion() == clienteRegistrado.getIdDireccion()){
//						inserta nueva direccion de recoleccion de documentos
						try {
							idNuevaDireccionRecoleccion = direccionDao.insert(persona.getCliente()
									.getListaDirecciones().get(1));// insert direccion
							// para obtener el id de direccion.
						} catch (Exception e) {
							log.debug("error al insertar direccion de recoleccion, en actualizacion de cliente" +
									" personaMoral causa: "
									+ e.getCause());
						}
						persona.getCliente().getRecoleccionDocumentos().setIdDireccion(idNuevaDireccionRecoleccion.
								getIdDireccion());
//						evalua si ya se tiene una direccion de recoleccion ya registrada para actualizar
					}else if(recoleccionRegistrada.getIdDireccion() != clienteRegistrado.getIdDireccion() && 
							persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 3){
//						actualiza direccion de recoleccion ya registrada
						try {
							persona.getCliente().getListaDirecciones().get(1).setIdDireccion(recoleccionRegistrada.
									getIdDireccion());
							direccionDao.update(persona.getCliente().getListaDirecciones().get(1));
						} catch (Exception e) {
							log.error("Falla al actualizar Direccion de recoleccion causa: " + e.getCause());
						}
						persona.getCliente().getRecoleccionDocumentos().setIdDireccion(recoleccionRegistrada.
								getIdDireccion());
					}else{
						persona.getCliente().getRecoleccionDocumentos().setIdDireccion(clienteRegistrado.getIdDireccion());
					}
				}
				
//				actualiza tabla de recoleccion de documentos
				try {
					persona.getCliente().getRecoleccionDocumentos().setIdCliente(clienteRegistrado.getIdCliente());
					recoleccionDao.update(persona.getCliente()
							.getRecoleccionDocumentos());
				} catch (Exception e) {
					log.error("Falla al recolectaDocumentos servicios causa: "
							+ e.getCause());
				}
				
//				actualiza tabla de representante legal
				try {
					persona.getCliente().getRepresentanteLegal().setIdRepLegal(detalleRepresentante.getIdRepLegal());
					persona.getCliente().getRepresentanteLegal().setIdCliente(clienteRegistrado.getIdCliente());
					persona.getCliente().getRepresentanteLegal().setIdDireccion(detalleRepresentante.getIdDireccion());
					representanteLegalDao.update(persona.getCliente().getRepresentanteLegal());
				} catch (Exception e) {
					log.error("Falla al actualizar datos del representante causa: " + e.getCause());
				}
//				actualiza la tabla de docuementos del representante legal
				try {
					persona.getCliente().getRepresentanteDoc().setIdRepLegal(documentosRepresentante.getIdRepLegal());
					persona.getCliente().getRepresentanteDoc().setIdCliente(clienteRegistrado.getIdCliente());
					representanteDocDao.update(persona.getCliente().getRepresentanteDoc());
				} catch (Exception e) {
					log.error("Falla al actualizar documentos del representante causa: " + e.getCause());
				}
//			evalua si se tienen datos del representante y el usuario los borra	
			}else if(documentosPersonaMoral.getIdentRepLegal() == 1 && persona.getCliente()
					.getDocumentos().getIdentRepLegal() == 0){
				
//				elimina los documentos del representante legal
				try {
					RepresentanteDocPkDTO idDocumentosBorrarRepresentante = new RepresentanteDocPkDTO();
					idDocumentosBorrarRepresentante.setIdRepLegal(documentosRepresentante.getIdRepLegal());
					representanteDocDao.delete(idDocumentosBorrarRepresentante);
				} catch (Exception e) {
					log.error("Falla al borrar documentos del representante causa: " + e.getCause());
				}
				
//				elimina informacion de la tabla de representante legal
				try {
					RepresentanteLegalPkDTO idBorrarRepresentante = new RepresentanteLegalPkDTO();
					idBorrarRepresentante.setIdRepLegal(detalleRepresentante.getIdRepLegal());
					representanteLegalDao.delete(idBorrarRepresentante);
				} catch (Exception e) {
					log.error("Falla al borrar representante causa: " + e.getCause());
				}
				
//				elimina direccion del representante legal
				try {
					DireccionPkDTO idDireccionBorrarRepresentante = new DireccionPkDTO();
					idDireccionBorrarRepresentante.setIdDireccion(detalleRepresentante.getIdDireccion());
					direccionDao.delete(idDireccionBorrarRepresentante);
				} catch (Exception e) {
					log.error("Falla al borrar direccion del representante causa: " + e.getCause());
				}
//				evalua numero de direcciones para recoleccion de documentos para dar de alta o actualizar
//				direccion de recoleccion
				DireccionPkDTO idNuevaDireccionRecoleccion = null;
				if(persona.getCliente().getListaDirecciones().size() == 2 && persona.getCliente().
						getListaDirecciones().get(1).getIdTipoDireccion() == 2 && 
						persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 3 && 
						recoleccionRegistrada.getIdDireccion() == clienteRegistrado.getIdDireccion()){
//					inserta nueva direccion de recoleccion de documentos
					try {
						idNuevaDireccionRecoleccion = direccionDao.insert(persona.getCliente()
								.getListaDirecciones().get(1));// insert direccion
						// para obtener el id de direccion.
					} catch (Exception e) {
						log.debug("error al insertar direccion de recoleccion, en actualizacion de cliente" +
								" personaMoral causa: "
								+ e.getCause());
					}
					persona.getCliente().getRecoleccionDocumentos().setIdDireccion(idNuevaDireccionRecoleccion.
							getIdDireccion());
//					evalua si ya se tiene una direccion de recoleccion ya registrada para actualizar
				}else if(recoleccionRegistrada.getIdDireccion() != clienteRegistrado.getIdDireccion() && 
						persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 3){
//					actualiza direccion de recoleccion ya registrada
					try {
						persona.getCliente().getListaDirecciones().get(1).setIdDireccion(recoleccionRegistrada
								.getIdDireccion());
						direccionDao.update(persona.getCliente().getListaDirecciones().get(1));
						persona.getCliente().getRecoleccionDocumentos().setIdDireccion(recoleccionRegistrada
								.getIdDireccion());
					} catch (Exception e) {
						log.error("Falla al actualizar Direccion de recoleccion causa: " + e.getCause());
					}
				}else if(persona.getCliente().getListaDirecciones().size() == 1 && (persona.getCliente()
						.getRecoleccionDocumentos().getLugarRecoleccion() == 1 || persona.getCliente()
						.getRecoleccionDocumentos().getLugarRecoleccion() == 2) && 
						recoleccionRegistrada.getIdDireccion() != clienteRegistrado.getIdDireccion()){
					try {
						DireccionPkDTO idBorrarDireccion = new DireccionPkDTO();
						idBorrarDireccion.setIdDireccion(recoleccionRegistrada.getIdDireccion());
						direccionDao.delete(idBorrarDireccion);
					} catch (Exception e) {
						 log.error("error al eliminar direccion de recoleccion en modifica persona fisica. " +
						 		"causa: " + e.getCause());
					}
					persona.getCliente().getRecoleccionDocumentos().setIdDireccion(clienteRegistrado.getIdDireccion());
				}else{
					persona.getCliente().getRecoleccionDocumentos().setIdDireccion(clienteRegistrado.getIdDireccion());
				}
				
//				actualiza tabla de recoleccion de documentos
				try {
					persona.getCliente().getRecoleccionDocumentos().setIdCliente(clienteRegistrado.getIdCliente());
					recoleccionDao.update(persona.getCliente()
							.getRecoleccionDocumentos());
				} catch (Exception e) {
					log.error("Falla al recolectaDocumentos servicios causa: "
							+ e.getCause());
				}
				
			}else{
//				evalua numero de direcciones para recoleccion de documentos para dar de alta o actualizar
//				direccion de recoleccion
				DireccionPkDTO idNuevaDireccionRecoleccion = null;
				if(persona.getCliente().getListaDirecciones().size() == 2 && persona.getCliente().
						getListaDirecciones().get(1).getIdTipoDireccion() == 2 && 
						persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 3 && 
						recoleccionRegistrada.getIdDireccion() == clienteRegistrado.getIdDireccion()){
//					inserta nueva direccion de recoleccion de documentos
					try {
						idNuevaDireccionRecoleccion = direccionDao.insert(persona.getCliente()
								.getListaDirecciones().get(1));// insert direccion
						// para obtener el id de direccion.
					} catch (Exception e) {
						log.debug("error al insertar direccion de recoleccion, en actualizacion de cliente" +
								" personaMoral causa: "
								+ e.getCause());
					}
					persona.getCliente().getRecoleccionDocumentos().setIdDireccion(idNuevaDireccionRecoleccion.
							getIdDireccion());
//					evalua si ya se tiene una direccion de recoleccion ya registrada para actualizar
				}else if(recoleccionRegistrada.getIdDireccion() != clienteRegistrado.getIdDireccion() && 
						persona.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 3){
//					actualiza direccion de recoleccion ya registrada
					try {
						persona.getCliente().getListaDirecciones().get(1).setIdDireccion(recoleccionRegistrada
								.getIdDireccion());
						direccionDao.update(persona.getCliente().getListaDirecciones().get(1));
						persona.getCliente().getRecoleccionDocumentos().setIdDireccion(recoleccionRegistrada
								.getIdDireccion());
					} catch (Exception e) {
						log.error("Falla al actualizar Direccion de recoleccion causa: " + e.getCause());
					}
				}else if(persona.getCliente().getListaDirecciones().size() == 1 && (persona.getCliente()
						.getRecoleccionDocumentos().getLugarRecoleccion() == 1 || persona.getCliente()
						.getRecoleccionDocumentos().getLugarRecoleccion() == 2) && 
						recoleccionRegistrada.getIdDireccion() != clienteRegistrado.getIdDireccion()){
					try {
						DireccionPkDTO idBorrarDireccion = new DireccionPkDTO();
						idBorrarDireccion.setIdDireccion(recoleccionRegistrada.getIdDireccion());
						direccionDao.delete(idBorrarDireccion);
					} catch (Exception e) {
						 log.error("error al eliminar direccion de recoleccion en modifica persona fisica. " +
						 		"causa: " + e.getCause());
					}
					persona.getCliente().getRecoleccionDocumentos().setIdDireccion(clienteRegistrado.getIdDireccion());
				}else{
					persona.getCliente().getRecoleccionDocumentos().setIdDireccion(clienteRegistrado.getIdDireccion());
				}
				
//				actualiza tabla de recoleccion de documentos
				try {
					persona.getCliente().getRecoleccionDocumentos().setIdCliente(clienteRegistrado.getIdCliente());
					recoleccionDao.update(persona.getCliente()
							.getRecoleccionDocumentos());
				} catch (Exception e) {
					log.error("Falla al recolectaDocumentos servicios causa: "
							+ e.getCause());
				}
				
				
			}
			status = "updated";
		}else{
			status = "error";
		}

		return status;
	}

	@Override
	public String borrarPersonaMoral(ClientePMoralesDTO persona)
			throws BusinessException {
		String resultado = "borrado";
		ClientePMoralesDTO detalleCliente = consultarDetallePersonaMoral(persona);
		ClientePkDTO pkCliente = new ClientePkDTO();
		ClientePMoralesPkDTO pkPersonaMoral = new ClientePMoralesPkDTO();
		DireccionPkDTO  pkDireccionFiscal = new DireccionPkDTO();
		DireccionPkDTO  pkDireccionRecoleccion = new DireccionPkDTO();
		DireccionPkDTO  pkDireccionRepresentante = new DireccionPkDTO();
		ServiciosPkDTO pkServicios =  new ServiciosPkDTO();
		DocumentosPkDTO pkDocumentos = new DocumentosPkDTO();
		RecolectaDocPkDTO pkRecoleccion = new RecolectaDocPkDTO();
		FacturaPkDTO pkFacturacion =  new FacturaPkDTO();
		RepresentanteLegalPkDTO pkRepresentante = new RepresentanteLegalPkDTO();
		RepresentanteDocPkDTO pkRepresentanteDoc = new RepresentanteDocPkDTO();
		
		pkCliente.setIdCliente(detalleCliente.getCliente().getIdCliente());
		pkPersonaMoral.setIdCliente(detalleCliente.getIdCliente());
		pkDireccionFiscal.setIdDireccion(detalleCliente.getCliente().getIdDireccion());
		if(detalleCliente.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 3){
			pkDireccionRecoleccion.setIdDireccion(detalleCliente.getCliente().getRecoleccionDocumentos().getIdDireccion());
		}
		if(detalleCliente.getCliente().getDocumentos().getIdentRepLegal() == 1){
			pkDireccionRepresentante.setIdDireccion(detalleCliente.getCliente().getRepresentanteLegal().getIdDireccion());
			pkRepresentante.setIdRepLegal(detalleCliente.getCliente().getRepresentanteLegal().getIdRepLegal());
			pkRepresentanteDoc.setIdRepLegal(detalleCliente.getCliente().getRepresentanteDoc().getIdRepLegal());
		}
		pkServicios.setIdServicos(detalleCliente.getCliente().getServicios().getIdServicos());
		pkDocumentos.setIdCliente(detalleCliente.getCliente().getDocumentos().getIdCliente());
		pkRecoleccion.setIdRecolectaDoc(detalleCliente.getCliente().getIdRecolectaDoc());
		pkFacturacion.setNumero(detalleCliente.getCliente().getFacturacion().getNumero());
		
//		elimina registro de tabla facturacion
		try {
			facturacionDao.delete(pkFacturacion);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro den tabla facturacion, causa: " + e.getCause());
		}
//		elimina registro tabla recoleccion de documentos
		try {
			recoleccionDao.delete(pkRecoleccion);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro den tabla recoleccion de documentos, causa: " + e.getCause());
		}
//		elimina registro de la tabla documentos
		try {
			documentosDao.delete(pkDocumentos);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro den tabla documentos, causa: " + e.getCause());
		}
//		elimima registos en la tabla servicios
		try {
			serviciosDao.delete(pkServicios);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro den tabla servicios, causa: " + e.getCause());
		}
//		elimina registro de personaFisca en tabla clientes_personas_moral
		try {
			personaMoralDao.delete(pkPersonaMoral);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro den tabla clientes personas fisicas, causa: " + e.getCause());
		}
//		elimina informacion del representante legal
		if(detalleCliente.getCliente().getDocumentos().getIdentRepLegal() == 1){
//			elimina registro de la tabla representante legal
			try {
				representanteLegalDao.delete(pkRepresentante);
			} catch (Exception e) {
				resultado = "error";
				log.error("error al eliminar registro de la tabla representante legal, causa: " + e.getCause());
			}
//			elimina regsitro de la tabla representante doc
			try {
				representanteDocDao.delete(pkRepresentanteDoc);
			} catch (Exception e) {
				resultado = "error";
				log.error("error al eliminar registro de la tabla representante legal doc, causa: " + e.getCause());
			}
//			elimina registro de la tabla direccion
			try {
				direccionDao.delete(pkDireccionRepresentante);
			} catch (Exception e) {
				resultado = "error";
				log.error("error al eliminar registro de la tabla representante legal, causa: " + e.getCause());
			}
		}
//		elimina informacion de la tabla cliente
		try {
			clienteDao.delete(pkCliente);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro den tabla clientes, causa: " + e.getCause());
		}
//		elimina direccion fiscal
		try {
			direccionDao.delete(pkDireccionFiscal);
		} catch (Exception e) {
			resultado = "error";
			log.error("error al eliminar registro direccion, causa: " + e.getCause());
		}
		if(detalleCliente.getCliente().getRecoleccionDocumentos().getLugarRecoleccion() == 3){
			try {
				direccionDao.delete(pkDireccionRecoleccion);
			} catch (Exception e) {
				resultado = "error";
				log.error("error al eliminar registro direccion de recoleccion, causa: " + e.getCause());
			}
		}
				
		return resultado;
	}

	/**
	 * @return the direccionDao
	 */
	public DireccionDao getDireccionDao() {
		return direccionDao;
	}

	/**
	 * @param direccionDao
	 *            the direccionDao to set
	 */
	public void setDireccionDao(DireccionDao direccionDao) {
		this.direccionDao = direccionDao;
	}

	/**
	 * @return the personaMoralDao
	 */
	public ClientePMoralesDao getPersonaMoralDao() {
		return personaMoralDao;
	}

	/**
	 * @param personaMoralDao
	 *            the personaMoralDao to set
	 */
	public void setPersonaMoralDao(ClientePMoralesDao personaMoralDao) {
		this.personaMoralDao = personaMoralDao;
	}

	/**
	 * @return the personaFisicaDao
	 */
	public ClientePersonasFisicasDao getPersonaFisicaDao() {
		return personaFisicaDao;
	}

	/**
	 * @param personaFisicaDao
	 *            the personaFisicaDao to set
	 */
	public void setPersonaFisicaDao(ClientePersonasFisicasDao personaFisicaDao) {
		this.personaFisicaDao = personaFisicaDao;
	}

	/**
	 * @return the serviciosDao
	 */
	public ServiciosDao getServiciosDao() {
		return serviciosDao;
	}

	/**
	 * @param serviciosDao
	 *            the serviciosDao to set
	 */
	public void setServiciosDao(ServiciosDao serviciosDao) {
		this.serviciosDao = serviciosDao;
	}

	/**
	 * @return the documentosDao
	 */
	public DocumentosDao getDocumentosDao() {
		return documentosDao;
	}

	/**
	 * @param documentosDao
	 *            the documentosDao to set
	 */
	public void setDocumentosDao(DocumentosDao documentosDao) {
		this.documentosDao = documentosDao;
	}

	/**
	 * @return the recoleccionDao
	 */
	public RecolectaDocDao getRecoleccionDao() {
		return recoleccionDao;
	}

	/**
	 * @param recoleccionDao
	 *            the recoleccionDao to set
	 */
	public void setRecoleccionDao(RecolectaDocDao recoleccionDao) {
		this.recoleccionDao = recoleccionDao;
	}

	/**
	 * @return the facturacionDao
	 */
	public FacturaDao getFacturacionDao() {
		return facturacionDao;
	}

	/**
	 * @param facturacionDao
	 *            the facturacionDao to set
	 */
	public void setFacturacionDao(FacturaDao facturacionDao) {
		this.facturacionDao = facturacionDao;
	}

	/**
	 * @return the clienteDao
	 */
	public ClienteDao getClienteDao() {
		return clienteDao;
	}

	/**
	 * @param clienteDao
	 *            the clienteDao to set
	 */
	public void setClienteDao(ClienteDao clienteDao) {
		this.clienteDao = clienteDao;
	}

	/**
	 * @return the representanteDocDao
	 */
	public RepresentanteDocDao getRepresentanteDocDao() {
		return representanteDocDao;
	}

	/**
	 * @param representanteDocDao
	 *            the representanteDocDao to set
	 */
	public void setRepresentanteDocDao(RepresentanteDocDao representanteDocDao) {
		this.representanteDocDao = representanteDocDao;
	}

	/**
	 * @return the representanteLegalDao
	 */
	public RepresentanteLegalDao getRepresentanteLegalDao() {
		return representanteLegalDao;
	}

	/**
	 * @param representanteLegalDao
	 *            the representanteLegalDao to set
	 */
	public void setRepresentanteLegalDao(
			RepresentanteLegalDao representanteLegalDao) {
		this.representanteLegalDao = representanteLegalDao;
	}

}